經過了前幾天主角的程式介紹,終於要輪到怪物登場了,今天我們要來介紹如何用程式達到尖刺怪追蹤主角和受到主角攻擊時會扣血的功能。
在開始編寫程式之前,我們先為尖刺怪設定Rigidbody元件及Collider碰撞器,因為尖刺怪的外型比較偏向圓形,所以我選用CircleCollder元件,至於Rigidbody的部分,尖刺怪我們原先的設定是會和地面碰撞,但並不會和主角產生碰撞,所以這一點要到Edit -> Project Settings -> Physics 2D -> Layer Collision Matrix設定。
我們開始進入到程式的部分,首先我們需要先設定變數,下圖為今天要介紹功能的所有變數,那就由我來為大家介紹。
Move Settings
,用來設定當主角已進入追蹤範圍時,怪物會如何移動的相關設定Track Settings
,用來設定判斷主角是否進入追蹤範圍,裡面有個LayerMask則是用來設定主角的圖層Mud Splash
,是關於怪物受到攻擊時,會噴出身上的泥巴的相關設定接著我們要設定能夠判斷是否在追蹤範圍內的函式,我們將它命名為FindPlayer,我們用到Physics2D.OverlapCircle,它需要三個參數,分別是原點、半徑、圖層,我們就使用它來判斷以現在的位置,往外半徑FollowRadius是否有主角的圖層,如果有的話就將target設定為主角gameObject。
知道的主角是否在追蹤範圍內之後,我們就要讓怪物可以動起來追蹤主角,這時我們再寫一個函式名為Tracking來實現這個功能。
Mathf.Sign
判斷diff.x的正負號,以了解怪物正往哪個方向移動,再調整怪物圖片的方向,讓怪物的移動看起來更加自然。最後就是在Update的部分,在適當的情況下加上Tracking的函式,就可以完成追蹤主角的功能囉!
那我們今天還有另外一個任務就是主角攻擊怪物時,會讓怪物扣血的功能,我們需要寫一個函式讓主角在攻擊時能夠抓到這個函式,此函式名為TakeDamage,而且它包含了一個參數,也就是扣血的數值。裡面會用到enemy_dead腳本裡的變數,這個腳本裡的功能會在而外說明。
在進入到TakeDamage之前,我先介紹兩個函式,分別是Freeze和ChangeColor,由於這兩個函式都和等待時間有關,所以我選擇使用IEnumerator
來達成協程。
Freeze
,當怪物被主角攻擊時,會冷卻freezeTime的時間。ChangeColor
,怪物被攻擊也會改變自體的顏色,好讓玩家分辨主角是否有正確攻擊到,等待colorChangeTime之後,就會恢復原來的顏色。接著我們就可以進入到TakeDamage的函式當中,它的流程如下:
這樣我們扣血的功能就可以實現了,那今天任務就達成囉!明天我們還會繼續介紹怪物的其他功能,那我們明天見。